1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : common/class.modulautomation.inc.php
5 : - Modulgruppe: Framework
6 : - Beschreibung: Basisklasse für automatisch ausgeführte Aktionen einzelner Modulgruppen
7 : - Version: 0.7, 30/10/05
8 : - Autor(en): Christain Gerhardt <case42@gmx.net>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 : /**
24 : * In dieser Datei wird die Klasse ModulAutomation implementiert.
25 : * @version 0.7, 30/10/05
26 : * @author Christian Gerhardt <case42@gmx.net>
27 : * @package eStudy.Framework
28 : * @subpackage automation
29 : */
30 : /**
31 : * Klasse die als Basistyp für die Automatisierung der einzelnen Modulgruppen herhalten soll
32 : * Falls eine Modulgruppe automatische Aufgaben zu erledigen hat ist eine Subklasse
33 : * dieser Klasse zu implementierten und in einer <i><b>auto.inc.php</b></i> Datei im Root-Verzeichnis
34 : * der Modulgruppe zu hinterlegen. <br>
35 : * Diese wird dann automatisch eingebunden und die entsprechenden Methoden werden
36 : * ausgeführt<br>
37 : * Genauere informationen über diese <i><b>auto.inc.php</b></i> Datei entnehmen sie bitte dem
38 : * Entwicklungshandbuch oder der Dokumentation der Klasse {@link Automation <b>Automation</b>}.<br>
39 : * Alle Methoden sollten <b>true</b> bei erfolgreicher und <i>false</i> bei fehlerhafter
40 : * Ausführung zurückgeben. Fehlermeldungen um diese Fehler zu dokumentieren, sollten
41 : * mit Hilfe der {@link error() <b>error()</b>} Methode im ErrorString - Array gespeichert werden,
42 : * und können später mit {@link echoErrorString() echoErrorString()<b></b>} ausgelesen werden.<br>
43 : * Zusätzlich kann bei der Instanzierung der Klasse ein Filepointer übergeben werden,
44 : * der auf eine Log-Datei zeigt. Mit Hilfe der Methode {@link writeToLogFile() <b>writeToLogFile</b>}
45 : * können dann Meldungen über die Aktivitäten der Automatisierung zur späteren Einsicht
46 : * gespeichert werden.<br>
47 : * Das Attribut <code>necessaryDatabaseTable</code> sollte den Namen einer Datenbanktabelle enthalten
48 : * die Anzeigt, dass das Modul in eStudy installiert wurde. Vor dem Ausführen der Automatisierung wird
49 : * geprüft, ob die Tabelle in der Datenbank vorhanden ist, und im negativen Fall, wird die Automatisierung
50 : * nicht durchgeführt. Das soll Fehler durch noch nicht installierte Module verhindern.<br>
51 : * Ist Verbose auf <i>true</i> gesetzt, werden diese Meldungen auch an den Browser geschickt.<br>
52 : * Um weitere Informationen zu geben und eine evtl. Fehlerbehandlung zu vereinfachen, sollte
53 : * der InfoString auf einen markanten Wert gesetzt werden, der Informationen zu der Klasse liefert
54 : * zu dem das aufgerufene Objekt gehört. Mindestens sollte der Name der Moulgruppe oder des Klasse
55 : * darin gepeichert sein.<br>
56 : *
57 : * @package eStudy.Framework
58 : * @subpackage automation
59 : * @version 0.7, 30/10/05
60 : * @author Christian Gerhardt <case42@gmx.net>
61 : * @copyright Gerdisoftwares 2003
62 : * @abstract
63 : */
64 : class ModulAutomation {
65 : /**
66 : * Ein Array von Fehlermeldungen.
67 : * @access protected
68 : * @var array
69 : */
70 : var $errorString = array();
71 : /**
72 : * Filepointer auf eine LogDatei.
73 : * @access private
74 : * @var integer
75 : */
76 : var $fp = 0;
77 : /**
78 : * Gibt an ob zusätzliche Meldungen ausgegeben werden sollen
79 : * @access protected
80 : * @var bool
81 : */
82 : var $verbose = false;
83 : /**
84 : * Infostring für zusätzliche Informationen zum Objekt
85 : * Jede Subklasse von {@link ModulAutomation <b>ModulAutomation</b>}
86 : * sollte hier Informationen über sich hinterlegen um eine Fehlerfindung
87 : * zu vereinfachen.<br>
88 : * Ein Beispiel hierfür wäre:<br>
89 : * <b>$info = 'Automatisierung der Modulgruppe XY'</b><br>
90 : * @access protected
91 : * @var string
92 : */
93 : var $info = 'Change this message!';
94 : /**
95 : * Die Angabe einer für die Automatisierung notwendigen
96 : * Datenbanktabelle.
97 : * Es wird geprüft ob diese Tabelle in der Datenbank vorhanden ist,
98 : * oder nicht. Falls nicht, wird die Automatisierung der aktuellen Klasse
99 : * nicht durchgeführt.
100 : * @access protected
101 : * @var string
102 : */
103 : var $necessaryDatabaseTable = null;
104 : /**
105 : * Konstruktor.
106 : * Dieser Konstruktor muß unbeding von der Subklasse aufgerufen werden!
107 : * @access public
108 : * @param integer $fd - der Filedeskriptor einer Logdatei
109 : * @param bool $verbose - ob zusätzliche Meldungen ausgegeben werden sollen
110 : */
111 : function ModulAutomation($fp = 0, $verbose = false) {
112 1 : if (is_resource($fp) and $fp > 0) {
113 0 : $this->fp = $fp;
114 0 : }
115 1 : if (is_bool($verbose)) {
116 1 : $this->verbose = $verbose;
117 1 : }
118 1 : }
119 : /**
120 : * Prüft ob das Modul installiert ist, zu dem dieses Modulautomatisierung gehört.
121 : * Die Methode Prüft ob die in <code>necessaryDatabaseTable</code> angegebene Tabelle
122 : * in der Datenbank vorhanden ist. Ist dem Attribut <i>null</i> zugewiesen, liefert
123 : * die Methode <i>true</i> zurück.
124 : * @access public
125 : * @return bool
126 : */
127 : function modulIsInstalled() {
128 0 : global $db, $settings;
129 0 : if ($this->necessaryDatabaseTable) {
130 0 : $tableList = $db->get_col("SHOW TABLES");
131 0 : return in_array($settings['dbPrefix'].$this->necessaryDatabaseTable, $tableList);
132 : } else {
133 0 : return true;
134 : }
135 : }
136 : //---------------------set - functions-------------------------------//
137 :
138 : /**
139 : * Setzt den Verbose wert.
140 : * @final
141 : * @access public
142 : * @param bool $verbose - der neue Verbose-Wert
143 : * @return void
144 : */
145 : function setVerbose($verbose) {
146 0 : if (is_bool($verbose)) {
147 0 : $this->verbose = $verbose;
148 0 : }
149 0 : }
150 : /**
151 : * Setzt den FilePointer.
152 : * @final
153 : * @access public
154 : * @param integer $fp - ein Filepointer zu einer geöfneten Datei
155 : * @return void
156 : */
157 : function setFilePointer($fp) {
158 0 : if (is_resource($fp) and $fp > 0) {
159 0 : $this->fp = $fp;
160 0 : }
161 0 : }
162 : //---------------automated - functions-------------------------------//
163 :
164 : /**
165 : * Tägliche Arbeit des Moduls
166 : * @abstract
167 : * @access public
168 : * @return bool - Erfolgswert
169 : */
170 : function dailyWork() {
171 0 : return true;
172 : }
173 : /**
174 : * Wöchendliche Arbeit des Moduls
175 : * @abstract
176 : * @access public
177 : * @return bool - Erfolgwert
178 : */
179 : function weeklyWork() {
180 0 : return true;
181 : }
182 : //--------------------user - functions-------------------------------//
183 :
184 : /**
185 : * Wird ausgeführt wenn ein neuer User registriert wird.
186 : * Auszuführen nach dem Eintrag in die Benutzerdatenbank.
187 : * @access public
188 : * @return bool
189 : */
190 : function newUser($userID) {
191 0 : return true;
192 : }
193 : /**
194 : * Wird ausgeführt wenn ein User die Benutzergruppe wechselt.
195 : * Auszuführen, nach dem Eintrag der neuen Benutzergruppe in die Datenbank.
196 : * @access public
197 : * @param integer $userID - der Benutzer
198 : * @param integer $oldGroup - die alte Benutzergruppe
199 : * @return bool
200 : */
201 : function changeUserGroup($userID, $oldGroup) {
202 0 : return true;
203 : }
204 : /**
205 : * Wird ausgeführt wenn sich die Daten eines User geändert haben.
206 : * Auszuführen, nach dem Eintrag der neuen Benutzerdaten in die Datenbank.<br>
207 : * Es betrifft die Einträge in den Tabellen <b>user</b> und <b>user_hompage</b>.
208 : * <b>Beachte!</b><br>
209 : * Für das ändern der Benutzergruppe gibt es eine eigene Methode. Sollten sich beides
210 : * ändern, müssen auch beide Methoden aufgerufen werden.<br>
211 : * Gleichwohl gilt dies auch für andere Methoden die einen Spezialfall abdecken.
212 : * <b>updateUser()</b> wird daher nur aufgerufen, wenn keiner der behandelten
213 : * spezialfälle greift!
214 : *
215 : * @access public
216 : * @param integer $userID - der Benutzer
217 : * @return bool
218 : */
219 : function updateUser($userID) {
220 0 : return true;
221 : }
222 : /**
223 : * Modulspezifische Aufräumarbeit wenn ein User gelöscht wird
224 : * @abstract
225 : * @access public
226 : * @param integer $userID - die ID des Users
227 : * @return bool - Erfolgwert
228 : */
229 : function deleteUser($userID) {
230 0 : return true;
231 : }
232 : //------------------course - functions-------------------------------//
233 :
234 : /**
235 : * Wird ausgeführt wenn ein User in einen Kurs aufgenommen wird.
236 : * Auszuführen nach dem Eintrag des Users in die Kurstabelle.
237 : * @abstract
238 : * @access public
239 : * @param integer $userID - Die ID des neuen Kursteilnehmers
240 : * @param integer $courseID - Die ID des Kurses
241 : * @return bool - Erfogswert
242 : */
243 : function addUserToCourse($userID, $courseID) {
244 0 : return true;
245 : }
246 : /**
247 : * Wird ausgeführt wenn ein User in einen eComunity aufgenommen wird.
248 : * Auszuführen nach dem Eintrag des Users in die Kurstabelle.
249 : * @abstract
250 : * @access public
251 : * @param integer $userID - Die ID des neuen Kursteilnehmers
252 : * @param integer $courseID - Die ID des Kurses
253 : * @return bool - Erfogswert
254 : */
255 : function addUserToEcommunity($userID, $courseID) {
256 0 : return true;
257 : }
258 : /**
259 : * Wird ausgeführt wenn ein User in einen Kurs verläßt.
260 : * Auszuführen vor dem Löschen des Users aus der Kurstabelle.
261 : * @abstract
262 : * @access public
263 : * @param integer $userID - Die ID des neuen Kursteilnehmers
264 : * @param integer $courseID - Die ID des Kurses
265 : * @return bool - Erfogswert
266 : */
267 : function deleteUserFromCourse($userID, $courseID) {
268 0 : return true;
269 : }
270 : /**
271 : * Wird ausgeführt wenn ein neuer Kurs erstellt wird.
272 : * Auszuführen nach dem Eintrag des neuen Kurses in die Datenbank.
273 : * @abstract
274 : * @access public
275 : * @param integer $courseID - Die ID des neuen Kurses
276 : * @return bool - Erfogswert
277 : */
278 : function newCourse($courseID) {
279 0 : return true;
280 : }
281 : /**
282 : * Wird ausgeführt wenn ein neue eCommunity erstellt wird.
283 : * Auszuführen nach dem Eintrag des neuen eCommunity in die Datenbank.
284 : * @abstract
285 : * @access public
286 : * @param integer $courseID - Die ID des neuen Kurses
287 : * @return bool - Erfogswert
288 : */
289 : function newEcommunity($courseID) {
290 0 : return true;
291 : }
292 : /**
293 : * Wird ausgeführt wenn sich die Daten eines Kurses geändert haben.
294 : * Auszuführen, nach dem Eintrag der neuen Kursdaten in die Datenbank.<br>
295 : * Es betrifft die Einträge in der Tabelle courses.
296 : *
297 : * @access public
298 : * @param integer $courseID - der Kurs
299 : * @return bool
300 : */
301 : function updateCourse($courseID) {
302 0 : return true;
303 : }
304 : /**
305 : * Modulspezifische Aufräumarbeit wenn eine Veranstaltung gelöscht wird
306 : * @abstract
307 : * @access public
308 : * @param integer $courseID - die ID der Veranstaltung
309 : * @return bool - Erfogswert
310 : */
311 : function deleteCourse($courseID) {
312 0 : return true;
313 : }
314 : /**
315 : * Modulspezifische Aufräumarbeit wenn eine Veranstaltung archiviert wird
316 : * @abstract
317 : * @access public
318 : * @param integer $courseID - die ID der Veranstaltung
319 : * @return bool - Erfogswert
320 : */
321 : function archiveCourse($courseID) {
322 0 : return true;
323 : }
324 : /**
325 : * Modulspezifische Aufräumarbeit wenn eine Veranstaltung reaktiviert wird
326 : * @abstract
327 : * @access public
328 : * @param integer $courseID - die ID der Veranstaltung
329 : * @return bool - Erfogswert
330 : */
331 : function reactivateCourse($courseID) {
332 0 : return true;
333 : }
334 : /**
335 : * Wird ausgeführt, wenn ein neuer Assistent (Tutor) in einem Kurs ernannt wird.
336 : * Auszuführen nach dem Eintrag in die Assistententabelle
337 : * @abstract
338 : * @access public
339 : * @param integer $userID - die ID des neuen Assistenten
340 : * @param integer $courseID - die ID der Veranstaltung
341 : * @return bool - Erfogswert
342 : */
343 : function addAssistentToCourse($userID, $courseID) {
344 0 : return true;
345 : }
346 : /**
347 : * Wird ausgeführt, wenn ein Assistent(Tutor) seinen Status verliert.
348 : * Auszuführen vor dem Löschen des Eintrags in der Assistententabelle.
349 : * @abstract
350 : * @access public
351 : * @param integer $userID - die ID des Assistenten
352 : * @param integer $courseID - die ID der Veranstaltung
353 : * @return bool - Erfogswert
354 : */
355 : function deleteAssistentFromCourse($userID, $courseID) {
356 0 : return true;
357 : }
358 : /**
359 : * Wird ausgeführt, wenn die Benutzergruppe eines Mitglieds in einem Kurs geändert wird.
360 : * @abstract
361 : * @access public
362 : * @param integer $userID - die ID des Assistenten
363 : * @param integer $courseID - die ID der Veranstaltung
364 : * @param integer $oldGroup - die alte Benutzergruppe
365 : * @param integer $newGroup - die neue Benutzergruppe
366 : * @return bool - Erfogswert
367 : */
368 : function changeUserGroupInCourse($userID, $courseID, $oldGroup, $newGroup) {
369 0 : return true;
370 : }
371 : //-------------------error - functions-------------------------------//
372 :
373 : /**
374 : * Fügt eine Fehlermeldung zu errorString hinzu
375 : * @final
376 : * @access protected
377 : * @param string $string - Die Fehlermeldung
378 : * @return void
379 : */
380 : function error($string) {
381 0 : if (is_string($string)) {
382 0 : $this->errorString[] = $string;
383 0 : }
384 0 : }
385 : /**
386 : * Gibt die Fehlermeldungen zurück;
387 : * Alle Fehlermeldungen werden in einen String aneinandergereiht.
388 : * Zwischen ihnen kann ein Seperator eingefügt werden.
389 : * @final
390 : * @access public
391 : * @param string $separator - der Separator
392 : * @return string
393 : */
394 : function echoErrorString($separator = ' ') {
395 0 : if (!is_string($separator)) {
396 : //default seperator
397 0 : $separator = " ";
398 0 : }
399 0 : return implode($separator, $this->errorString);
400 : }
401 : /**
402 : * Schreibt eine Meldung in das Logfile.
403 : * Falls Verbose auf true steht, wird die Meldung auch an
404 : * den Browser geschickt.<br>
405 : * Zuvor muß ein gültiger Filepointer bei der Erzeugung des
406 : * Objekts übergeben worden sein.<br>
407 : * @final
408 : * @access protected
409 : * @param string $message - die Meldung.
410 : * @param string $indent - Einrückung (Standardmäßig 4 Leerzeichen)
411 : * @return void
412 : */
413 : function writeToLogFile($message, $indent = " ") {
414 0 : if ($this->verbose == 1) {
415 0 : echo "$message<br />\n";
416 0 : }
417 : //nur wenn ein filedeskriptor angegeben ist
418 0 : if (is_resource($this->fp)) {
419 0 : fwrite($this->fp, "$indent$message\n");
420 0 : }
421 0 : }
422 : //--------------------help - functions-------------------------------//
423 :
424 : /**
425 : * Gibt den Infostring zurück.
426 : * @final
427 : * @access public
428 : * @return void
429 : */
430 : function getInfo() {
431 0 : return $this->info;
432 : }
433 : /**
434 : * Ermittelt die Benutzergruppe eines Users.
435 : * Im Fehlerfall wird -1 zurueckgegeben.
436 : * @access protected
437 : * @param integer $userID - der User dessen Benutzergruppe man wissen will.
438 : * @return integer - die Benutzergruppe (-1 im Fehlerfall)
439 : */
440 : function getUserGroup($userID) {
441 0 : global $db, $settings;
442 0 : if (is_numeric($userID) and is_object($db)) {
443 0 : $query = "SELECT Usergroup FROM %suser WHERE ID='%s'";
444 0 : $query = sprintf($query, $settings['dbPrefix'], $userID);
445 0 : $usergroup = $db->get_var($query);
446 0 : if ($usergroup) return $usergroup;
447 0 : }
448 0 : return -1;
449 : }
450 : }
|